Code Review
コードレビュー
GitHub上のPRをレビューする方法
手戻りを減らす工夫
方針の段階でCode Review
#WIP
code reviewの目的は方針の共有
https://camlspotter.hatenablog.com/entry/20120814/1344919762
https://speakerdeck.com/utgwkk/da-ji-xiang-si-dot-pm
https://blog.shibayu36.org/entry/2016/06/30/110000
https://zenn.dev/praha/articles/07de6be200563b
/kenchan/コードレビューでIMOやNITSを使わない
/shokai/プルリク事後レビュー会
金言が詰まってるmrsekut.icon
試行錯誤の速度を上げることを重視しまくっている
@shokai.iconのPRが多すぎるので、@shokai.iconのPRのみは、リリース後にコードレビューする会を実施してる
数が多くてレビューが大変
詳しくない人がレビューし
ても品質が上がらない
コードの土地勘は、結局レビューだけしてても得られない(と思う@shokai.icon)
自分で書いて動かして壊して、直した部分しかわからない
/Nota/障害範囲を限定できるならproductionで過激に実験しても問題ないに書いたshokai.icon
これ読みてえmrsekut.icon
障害範囲を限定できるならproductionで過激に実験しても問題ない
対ビジネスユーザーの問い合わせ
第一報で「もう直しました」と返信できるとサポートコストを削減できる
一度にレビューできるコード量の限界
/mrsekut-book-4297144840/055
https://smartbear.com/learn/code-review/best-practices-for-peer-code-review/
一度にレビューする量が400行を超えると、欠陥を見つける能力が低下する
#??
この辺の知見をまとめた書籍とかないのかな?
自動化できるところは自動化する
CIで、testや型エラー、lintなどの検証を行う
#??
レビューする時に考えるべきこと
どれぐらいの時間をかけるべきか
どういう手順でコードを見ていくべきか
commitを追っていく
diffだけみる、全部見る
コードだけ見る、実際に動かす
段階が考えられそう?mrsekut.icon
まず型エラー・テストで確認
この辺はCIにやらせるべき
まず動かしてみてちゃんと動くか確認
プログラム内部を確認
↑上にあるほど、自明なミスなので早い段階で却下できる(?)
指摘の仕方、伝え方
『みんなではじめるデザイン批評』
「俺が修正したほうが速い」という場合にどうするか
レビューの観点
段階というか、分類がありそうmrsekut.icon
プログラムの変更容易姓の諸々
セキュリティ・パフォーマンスなど最低限必須なもの
汚いが動く、とりあえずユーザに価値は届けられる
仕様を満たしている
バグってない
https://www.slideshare.net/takafumionaka/ss-71482322 p.10~
merge済みのbranchを削除する
レビュー後のコメントについて
最近「LGTM」しか言ってない
ここを見ました、ここは見てません、みたいなことをちゃんと言うべきかもmrsekut.icon
#??
レビューをお願いする時に考えるべきこと
方針の段階でCode Reviewしてもらう
開発に着手する前に合意を取って手戻りを減らす
rebaseなどしてcommitを整形するか
λ git rebase developしてからpushするなど
どういうcommit粒度にすべきか
git commitを小さく作る
commit messageを気にする
PR前に一連のcommitを編集する方法が必要だなあmrsekut.icon
fixupとかを駆使してキレイにしていく
どういうPR粒度にすべきか
例えば、リファクタ・フォーマットだけで1回PRを出す
PRには何を書くべきか
PRに書こうmrsekut.icon
Commit suggestion
レビューしてもらう側
/shokai/Pull Requestに動作確認方法を書け
https://google.github.io/eng-practices/review/reviewer/speed.html
こういうノリあるんだ、なるほど
社内プロダクト開発においてはpull requestを出した当人がマージボタンを押す ref
これは意見があると思うが個人的にはこだわりのスタイル
「自分が押したマージが本番に出ていく」という体験をしてもらう
コードベースへの当人のオーナーシップの醸成
というか、GithubのレビューページでVSCode並のシンタックスハイライトや、コンパイルエラー、unusedの表示などをしてくれればよいのだが。
reviewdog
https://github.com/reviewdog/reviewdog
コードレビューの自動化
https://docs.github.com/ja/organizations/organizing-members-into-teams/managing-code-review-settings-for-your-team
レビュアーの自動割当
https://docs.github.com/ja/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
レビューする時
主軸が誰にあるのかという話がある
自分が完全にマネージする場合は、かなり強めに必要なルールの徹底をお願いする
そうでない場合は基本提案になりそう
reviewerがコードにコメントを書くというのちょっとありmrsekut.icon
書いている人は理解しているので、コメントの粒度の判断が難しい
記憶を忘れたときに自分でコメントを付ける必要がある
レビュワーが読んだときに、「ん?あ〜なるほど」となった箇所にちゃんとコメントを残すようにする
引っかかりポイントを減らす
今のチームは人数が少なすぎて、レビューの文化が薄いのであまり知見が溜まっていないmrsekut.icon
5つほどプロダクトがあって、エンジニアが2人なので、プロダクトごとに専属みたいになっている
だから、記事を読んだりして知見を溜めるしか無い
もっとOSSにcontributeしまくればいいかもしれない
でも、レビュワー側で参加することってあまりない
以下に書いてるのは、どこかの記事に書いてたやつで、良さそう、と思ったものをただ列挙したものmrsekut.icon
良さそう、と思っただけで実践しているわけではないmrsekut.icon
レビューはできるだけ早く行う
特に日を跨いだり、手戻りがあるとだるい
参考になるリンクを張る
コメントにラベルを付ける ref
[must]
必ず対応してほしい
[imo]
自分の意見や提案・好み。 自分ならこう書く
[nits]
些細な指摘
インデントやタイポ
[ask]
質問、確認。
コードの意味や背景が分からないから教えて
レビューで指摘→直す→再レビューで新しい指摘、をできるだけ避ける
ref
レビューされる側はだるく感じだろうな、というのはわかるmrsekut.icon
「1回で言えよ」と思うと思う
しかし、コードの実装場所がおかしいことに対するレビューと、仕様的な問題に対するレビューはわけないと話がしづらい
最高2回ぐらいかな、と思っておけばいいだろうかmrsekut.icon
あるいは1回目のレビューをする時点で、
「たぶん修正後にもう一度修正があるかもしれません。なぜなら、」と伝えておくとか
伝え方の問題
すぐに正答例を示す
「自分で考えろ」からのダメ出しは心理的安全性が低いので避ける
だめだと思う理由を書く ref
「hogehogeはpiyoなので、良くない気がします」
具体例を提示する
こちらの方が良いと思う理由も添える
「私ならこうします」構文をつかう
アドバイスはするが、それに従わなくて良いというスタンス
テキストで指摘する
口頭だと、聞き取り手のメモが大変
良い感じの大きさにまとめたScpraboxを投げるのも良さそう
レビューの使い回しができる
レビューが終わったら、可能なら直接顔をあわせて言葉を交わす
テキストだけだと冷たい雰囲気になるので
なるほどmrsekut.icon
やんわりとした言葉で伝える ref
x あなたのメソッドの書き方は分かりにくいですよ。
o このメソッドは私には少々分かりにくいです。この変数にもっと良い名前をつけられないでしょうか。
少なくとも1つは肯定意見を伝える ref
こういうのも地味に大事なんだろうなmrsekut.icon
褒める
絵文字を使う
「これ読んで勉強し直してきて」はアンチパターン
上手くモチベートさせないといけないmrsekut.icon
「この本が参考になりました」とかは良いかも
でも別にレビュー時に言うことでもない気がする
別の機会の勉強会でそれとなく伝えるとか
レビューで指摘されることで、読むタイミングを作ることできる
本の内容がより頭に入るようになる
diffに現れない箇所も見る
https://twitter.com/kawasy/status/1482004473778421763
https://qiita.com/awakia/items/8344ba751426e386e0f5#レビューする時
バグを生みやすい箇所を重点的に見る
https://qiita.com/awakia/items/8344ba751426e386e0f5#バグを生みやすいところを重点的に見る
境界値検査とか
layer的に重要な箇所を重点的に見る
Entityとか、table構造とか
後から修正するのが大変な部分をしっかり見る
お金に関する処理とか
https://qiita.com/awakia/items/8344ba751426e386e0f5#バグや設計変更があった時に大変になるところを重点的に見る
セキュリティ的に大丈夫か
法的に大丈夫か
UI、UXのチェック
初心者(?)にもレビューしてもらう
https://qiita.com/awakia/items/8344ba751426e386e0f5#初心者によるレビュー
より詳しい人のコードを読んでもらう機会の創出になるので、プロダクトについての知識が増えるので良さそうではあるmrsekut.icon
意外と、レビュアーのコードがクソなことも多く、若手のメンバーのレビューはしっかり見てくれるため予期しない不具合を見つけてくれることも多く、実際的に有益です ref
#??
例えば指摘項目がめちゃくちゃ多いときはどうするか
全部言う?小出しにする?
これは、たぶんそもそも事前に認識合わせをした方がいい気がするmrsekut.icon
ペアプロなりなんなり
あまりにも共有できていないと感じた時
実装前に方針を話しあう
ペアプロする
モブプロする
/shokai/コードレビュー
https://paytner.hatenablog.com/entry/developer-productivity-adcale-20221216
PR数を増やす
https://google.github.io/eng-practices/review/
google
https://speakerdeck.com/hisaichi5518/kodorebiyufalsehua
新卒に向けた資料
入ったメンバーがコードを理解するためのコードレビューだったり、
パフォーマンスならベンチマーク取るとか、
コードレビュー時に設計の問題が出てくるのはあまりよくなくて、実装前に共有しておくべき、
みたいな話がある
/kawasima/プルリクレビュー
https://hachibeechan.hateblo.jp/entry/2014/09/20/ノウハウの共有文化がない場所にコードレビュー
文化が共有されてないと辛そう
なんでいちいち指摘するの?時間かかるだけじゃん、とか言われると辛い
https://twitter.com/komitsubo/status/1516544935423770624
レビューは、技術的な好みを語る場ではない、という主張
https://osak.hatenablog.jp/entry/code-review-objectives-and-howto
はてぶがおおい
/nota-private-sample/なぜコードレビューを行うのか
https://myenigma.hatenablog.com/entry/2019/09/16/202308?utm_source=feed
https://c5meru.hatenablog.jp/entry/2017/11/10/235107?source=post_page-----28e4c09b0e4a----------------------
https://speakerdeck.com/hotchpotch/pull-request-woli-yong-sitakai-fa-wakuhuro
https://eh-career.com/engineerhub/entry/2018/01/24/110000
https://developers-jp.googleblog.com/2019/12/respectful-reviews.html
https://qiita.com/gakuri/items/f4970aea8de5fa9bf016
https://zenn.dev/mugi/articles/87f8be66989e62
https://zenn.dev/inabajunmr/articles/0749a5ad6f4e82
https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/cr_respect.md
https://hachibeechan.hateblo.jp/entry/code-review-is-not-required-process-to-win
https://note.com/qsona/n/n8b307fd047da
https://speakerdeck.com/akitotsukahara/imo-kodorebiyututenan-siiyone
https://speakerdeck.com/yosuke_furukawa/rebiyufalseshi-fang
https://techblog.karupas.org/entry/2021/11/07/212429
https://blog.sushi.money/entry/2021/11/08/151100
https://blog.sushi.money/entry/2017/06/02/020802
https://zenn.dev/dowanna6/articles/9f567f95dfcf0c
https://blog.shibayu36.org/entry/2014/01/19/180201
http://blog.livedoor.jp/lalha/archives/50495777.html
https://naoya-2.hatenadiary.org/entry/20140313/1394664578
https://www.slideshare.net/takafumionaka/ss-71482322
PRに100件もコメントが付くようなやつを、以下に短縮していくかの工夫を色々
https://speakerdeck.com/munetoshi/code-readability?slide=626
https://techlife.cookpad.com/entry/2015/03/30/174713
https://speakerdeck.com/ken_c_lo/pull-request-4-designers-githubwoshi-tutapuroguramatodezainafalseitereteibunakai-fa-huro